#ifndef    __BSP_LCD_H__
#define    __BSP_LCD_H__
#include "gd32f3x0.h"


/* LCD Size (Width and Height) */
#define  LCD_PIXEL_LESS       ((uint16_t)240)
#define  LCD_PIXEL_MORE      ((uint16_t)320)


//LCD数据端口定义
#define LCD_DB0_GPIO_PORT        	GPIOB
#define LCD_DB0_GPIO_CLK         	RCU_GPIOB
#define LCD_DB0_GPIO_PIN         	GPIO_PIN_0

#define LCD_DB1_GPIO_PORT        	GPIOB
#define LCD_DB1_GPIO_CLK         	RCU_GPIOB
#define LCD_DB1_GPIO_PIN         	GPIO_PIN_1

#define LCD_DB2_GPIO_PORT        	GPIOB
#define LCD_DB2_GPIO_CLK         	RCU_GPIOB
#define LCD_DB2_GPIO_PIN         	GPIO_PIN_2

#define LCD_DB3_GPIO_PORT        	GPIOB
#define LCD_DB3_GPIO_CLK         	RCU_GPIOB
#define LCD_DB3_GPIO_PIN         	GPIO_PIN_3

#define LCD_DB4_GPIO_PORT        	GPIOB
#define LCD_DB4_GPIO_CLK         	RCU_GPIOB
#define LCD_DB4_GPIO_PIN         	GPIO_PIN_4

#define LCD_DB5_GPIO_PORT        	GPIOB
#define LCD_DB5_GPIO_CLK         	RCU_GPIOB
#define LCD_DB5_GPIO_PIN         	GPIO_PIN_5

#define LCD_DB6_GPIO_PORT        	GPIOB
#define LCD_DB6_GPIO_CLK         	RCU_GPIOB
#define LCD_DB6_GPIO_PIN         	GPIO_PIN_6

#define LCD_DB7_GPIO_PORT        	GPIOB
#define LCD_DB7_GPIO_CLK         	RCU_GPIOB
#define LCD_DB7_GPIO_PIN         	GPIO_PIN_7

//LCD控制端口定义

#define LCD_RST_GPIO_PORT      GPIOF    //复位管脚
#define LCD_RST_GPIO_CLK       RCU_GPIOF
#define LCD_RST_GPIO_PIN       GPIO_PIN_7

#define LCD_RS_GPIO_PORT      GPIOF     //数据/命令 
#define LCD_RS_GPIO_CLK       RCU_GPIOF
#define LCD_RS_GPIO_PIN       GPIO_PIN_6

#define LCD_WR_GPIO_PORT         GPIOA  //写数据
#define LCD_WR_GPIO_CLK          RCU_GPIOA
#define LCD_WR_GPIO_PIN          GPIO_PIN_12

#define LCD_RD_GPIO_PORT       GPIOA   //读数据
#define LCD_RD_GPIO_CLK        RCU_GPIOA
#define LCD_RD_GPIO_PIN        GPIO_PIN_11
//GPIO_OCTL(gpio_periph) = (uint32_t)data;    (uint16_t)GPIO_OCTL(gpio_periph)
#define DATA_OUT(dat)          GPIO_OCTL(GPIOB)=(((uint16_t)GPIO_OCTL(GPIOB) & 0xff00)|(dat & 0x00ff))
#define DATA_IN                ((uint16_t)GPIO_ISTAT(GPIOB))

#define	LCD_RS_SET	    gpio_bit_set(LCD_RS_GPIO_PORT,LCD_RS_GPIO_PIN)     //数据/命令   
#define	LCD_WR_SET	    gpio_bit_set(LCD_WR_GPIO_PORT,LCD_WR_GPIO_PIN)    //写数据
#define	LCD_RD_SET		gpio_bit_set(LCD_RD_GPIO_PORT,LCD_RD_GPIO_PIN)    //读数据
#define	LCD_RST_SET		gpio_bit_set(LCD_RST_GPIO_PORT,LCD_RST_GPIO_PIN)     //复位
								    
#define	LCD_RS_CLR	    gpio_bit_reset(LCD_RS_GPIO_PORT,LCD_RS_GPIO_PIN)      //数据/命令	   
#define	LCD_WR_CLR	    gpio_bit_reset(LCD_WR_GPIO_PORT,LCD_WR_GPIO_PIN)   //写数据	
#define	LCD_RD_CLR	    gpio_bit_reset(LCD_RD_GPIO_PORT,LCD_RD_GPIO_PIN)     //读数据	
#define	LCD_RST_CLR	    gpio_bit_reset(LCD_RST_GPIO_PORT,LCD_RST_GPIO_PIN)      //复位
/***背光控制的管脚定义在bsp_backlight中**/

#define		CMD_SetCoordinateX			0x2A     //设置X坐标
#define		CMD_SetCoordinateY			0x2B     //设置Y坐标  (设置X,Y轴坐标的目的是确定后面发送的像素数据的显示区域)
#define     CMD_SetPixel				0x2C     //填充像素(即开始向GRAM中写数据了)

extern uint16_t	LCD_X_LENGTH;
extern uint16_t	LCD_Y_LENGTH;

void LCD_GC9306_GramScan(uint8_t ucOption);
void delay_ms(uint32_t nCount);
void LCD_Init(void);
 void LCD_OpenWindow(uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight);
  void LCD_FillColor(uint32_t ulAmout_Point,uint16_t usColor);
void LCD_WriteRegister(uint16_t reg, uint16_t dat);
void LCD_WriteData16(uint16_t dat);
void LCD_WriteData8(uint16_t dat);
void LCD_WriteCMD16(uint16_t cmd);
void LCD_WriteCMD8(uint16_t cmd);

#endif
